Chapter 7 of the Turbo Pascal Reference The Turbo Vision Reference (continued) This chapter is part of the Turbo Pascal Reference electronic freeware book (C) Copyright 1992 by Ed Mitchell. This freeware book contains supplementary material to Borland Pascal Developer's Guide, published by Que Corporation, 1992. However, Que Corporation has no affiliation with nor responsibility for the content of this free book. Please see Chapter 1 of the Turbo Pascal Reference for important information about your right to distribute and use this material freely. If you find this material of use, I would appreciate your purchase of one my books, such as the Borland Pascal Developer's Guide or Secrets of the Borland C++ Masters, Sams Books, 1992. Thank you. For additional information on using Turbo Vision, including a detailed tutorial, please see Chapters 11 through 16 of the Borland Pascal Developer's Guide. HistoryAdd procedure ------------------------------------------------------------ Declaration: procedure HistoryAdd ( Id: Byte; var Str: String); Unit: HistList Purpose: This is an internal routine used by the THistory and related objects to add a string Str to the history list identified by the Id number. HistoryBlock variable ------------------------------------------------------------ Declaration: HistoryBlock: Pointer = nil; Unit: HistList Purpose: The THistory object allocates a block of memory from the heap in order to store the history list. HistoryBlock is set to point to this memory block. HistoryCount function ------------------------------------------------------------ Declaration: function HistoryCount(Id: Byte): Word; Unit: HistList Purpose: The THistory history list system, and the associated history list memory manager (See HistoryAdd, HistoryBlock, HistorySize, HistoryStr, HistoryUsed) can manage multiple memory history lists. The HistoryCount function calculates and returns the number of items stored in the history list selected by the Id value. HistorySize variable ------------------------------------------------------------ Declaration: HistorySize: Word = 1024; Unit: HistList Purpose: At program initialization, TApplication.Init calls the InitHistory procedure to allocate history list memory space. The default allocation is determined by the value stored in HistorySize. To change this value, set HistorySize to a new size, specified in bytes, before calling TApplication.Init. HistoryStr function ------------------------------------------------------------ Declaration: function HistoryStr(Id: Byte; Index: Integer): String; Unit: HistList Purpose: Looks into the history list specified by Id, and returns the contents of the Index'th string in the list. HistoryUsed variable ------------------------------------------------------------ Declaration: HistoryUsed: Word = 0; Unit: HistList Purpose: This is an internal value used by the history list routines. InitHistory procedure ------------------------------------------------------------ Declaration: procedure InitHistory; Unit: HistList Purpose: TApplication.Init calls this routine to initialize the history list management system. Also see HistorySize and THistory. InputBox function ------------------------------------------------------------ Declaration: function InputBox (Title : String; ALabel : String; var S : String; Limit : Byte ) : Word; Unit: MsgBox, source code in \TP\TVDEMOS\MSGBOX.PAS Purpose: InputBox is not described in the Borland documentation but is contained in the file MSGBOX.PAS (and MSGBOX.TPU) contained in the \TP\TVDEMOS directory (TP 6.0). InputBox displays a simple dialog with a single label and input field, plus Okay and Cancel buttons. The Title parameter becomes the dialog box title, and the input field is given ALabel as a prompt line. The input field is set to Limit bytes in length. InputBox returns eithe cmOkay or cmCancel. See Listing DMSGBOX3.PAS for an example of using the message box. 1 { DMSGBOX3.PAS 2 Demonstrates use of InputBox 3 } 4 procedure TShell.DemoInputBox; 5 var 6 Control : Word; 7 begin 8 Control := InputBox('The Title', 'Enter some text:', FileName, 30); 9 end; { TShell.DemoInputBox } See: MessageBox, InputBoxRect, MessageBoxRect for related functions. InputBoxRect function ------------------------------------------------------------ Declaration: function InputBox (var Bounds : TRect; Title : String; ALabel : String; var S : String; Limit : Byte ) : Word; Unit: MsgBox, source code in \TP\TVDEMOS\MSGBOX.PAS Purpose: InputBoxRect is not described in the Borland documentation but is contained in the file MSGBOX.PAS (and MSGBOX.TPU) contained in the \TP\TVDEMOS directory (TP 6.0). InputBoxRect is identical to InputBox except that you can specify a bounding rectangle in order to position and size the input box to specific coordinates. See also MessageBoxRect. See: InputBox, MessageBox, MessageBoxRect InitEvents procedure ------------------------------------------------------------ Declaration: procedure InitEvents; Unit: Drivers; Purpose: This internal procedure initializes Turbo Vision's event manager, and initializes and displays the mouse, if installed. InitEvents is automatically called by TApplication.Init, and is terminated by calling its corresponding DoneEvent procedure. InitMemory procedure ------------------------------------------------------------ Declaration: procedure InitMemory; Unit: Memory Purpose: This internal procedure initialize's Turbo Vision's memory management system and is automatically called by TApplication.Init. InitMemory is terminated by calling its corresponding DoneMemory. InitSysError procedure ------------------------------------------------------------ Declaration: procedure InitSysError; Unit: Drivers Purpose: This internal procedure, called by TApplication.Init, initializes system error trapping by redirecting the interrupt vectors 09H, 1BH, 21H, 23H, and 24H and clearing DOS's Ctrl-Break state. System error trapping is terminated by calling the corresponding DoneSysError routine. InitVideo procedure ------------------------------------------------------------ Declaration: procedure InitVideo; Unit: Drivers Purpose: This internal procedure, called by TApplication.Init, initialize's Turbo Vision's video display manager and switches the display to the mode specified in the ScreenMode variable. InitVideo initializes the variables ScreenWidth, ScreenHeight, HiResScreen, CheckSnow, ScreenBuffer and CursorLines. kbXXXX constants ------------------------------------------------------------ Keyboard constants The kbXXXX constants are divided into two groups: a small group for detecting keyboard shift states, and a large group as equates for the non-standard keystrokes such as function and Alt keys. Keyboard Shift State constants Constant Value Usage kbRightShift $0001 Bit set if the right shift key down kbLeftShift $0002 Bit set if the left shift key down kbCtrlShift $0004 Bit set if the Ctrl key is down kbAltShift $0008 Bit set if the Alt key is down kbScrollState $0010 Bit set if the Scroll Lock is down kbNumState $0020 Bit set if the Num Lock is down kbCapsState $0040 Bit set if the Caps Lock down kbInsState $0080 Bit set if keyboard is in Ins Lock state The keyboard shift state constants are used as a bit mask to test a location in low memory at $40:$17 for the status of various keyboard keys, such as the Ctrl or Shift key. For example, to see if the keyboard is producing shifted characters, declare an absolute variable at $40:$17 and test the bits like this: var KeyboardShifts : Byte absolute $40:$17; ... if (KeyboardShifts and (kbRightShift or kbLeftShift or kbCapsState) ) <> 0 Keyboard Scancode Constants Use these constants to check for specific keystroke values in the TEvent.KeyCode field. For example, if Event.KeyCode = kbPgDn then { handle page down function } ... Alt-Ch key code constants Constant Value Constant Value kbAltA $1E00 kbAltN $3100 kbAltB $3000 kbAltO $1800 kbAltC $2E00 kbAltP $1900 kbAltD $2000 kbAltQ $1000 kbAltE $1200 kbAltR $1300 kbAltF $2100 kbAltS $1F00 kbAltG $2200 kbAltT $1400 kbAltH $2300 kbAltU $1600 kbAltI $1700 kbAltV $2F00 kbAltJ $2400 kbAltW $1100 kbAltK $2500 kbAltX $2D00 kbAltL $2600 kbAltY $1500 kbAltM $3200 kbAltZ $2C00 Ctrl and special key code constants Constant Value Constant Value kbAltEqual $8300 kbEnd $4F00 kbAltMinus $8200 kbEnter $1C0D kbAltSpace $0200 kbEsc $011B kbBack $0E08 kbGrayMinus $4A2D * kbCtrlBack $0E7F kbHome $4700 kbCtrlDel $0600 kbIns $5200 kbCtrlEnd $7500 kbLeft $4B00 * kbCtrlEnter $1C0A kbNoKey $0000 kbCtrlHome $7700 kbPgDn $5100 kbCtrlIns $0400 kbPgUp $4900 kbCtrlLeft $7300 kbGrayPlus $4E2B kbCtrlPgDn $7600 kbRight $4D00 * kbCtrlPgUp $8400 kbShiftDel $0700 kbCtrlPrtSc $7200 kbShiftIns $0500 kbCtrlRight $7400 kbShiftTab $0F00 kbDel $5300 kbTab $0F09 kbDown $5000 kbUp $4800 [*] kbGrayMinus and kbGrayPlus are the - and + keys on the numeric keypad. kbLeft and kbRight are the arrow keys. Alt-number key code constants Constant Value Constant Value kbAlt1 $7800 kbAlt6 $7D00 kbAlt2 $7900 kbAlt7 $7E00 kbAlt3 $7A00 kbAlt8 $7F00 kbAlt4 $7B00 kbAlt9 $8000 kbAlt5 $7C00 kbAlt0 $8100 Function key code constants Constant Value Constant Value kbF1 $3B00 kbF6 $4000 kbF2 $3C00 kbF7 $4100 kbF3 $3D00 kbF8 $4200 kbF4 $3E00 kbF9 $4300 kbF5 $3F00 kbF10 $4400 Shift-function key code constants Constant Value Constant Value kbShiftF1 $5400 kbShiftF6 $5900 kbShiftF2 $5500 kbShiftF7 $5A00 kbShiftF3 $5600 kbShiftF8 $5B00 kbShiftF4 $5700 kbShiftF9 $5C00 kbShiftF5 $5800 kbShiftF10 $5D00 Ctrl-function key code constants Constant Value Constant Value kbCtrlF1 $5E00 kbCtrlF6 $6300 kbCtrlF2 $5F00 kbCtrlF7 $6400 kbCtrlF3 $6000 kbCtrlF8 $6500 kbCtrlF4 $6100 kbCtrlF9 $6600 kbCtrlF5 $6200 kbCtrlF10 $6700 Alt-function key codes Constant Value Constant Value kbAltF1 $6800 kbAltF6 $6D00 kbAltF2 $6900 kbAltF7 $6E00 kbAltF3 $6A00 kbAltF8 $6F00 kbAltF4 $6B00 kbAltF9 $7000 kbAltF5 $6C00 kbAltF10 $7100 LongDiv function ------------------------------------------------------------ Declaration: function LongDiv( X:Longint; Y:Integer):Integer; Unit: Objects Purpose: LongDiv is an inline assembly function providing a fast implementation of X divided by Y. LongMul function ------------------------------------------------------------ Declaration: function LongDiv( X:Integer; Y:Integer):LongInt; Unit: Objects Purpose: LongMul is an inline assembly function providing a fast implementation of X multiplied by Y. LongRec type ------------------------------------------------------------ Declaration: type LongRec = record Lo, Hi: Word; end; Unit: Objects Purpose: Double word record type. LowMemory function ------------------------------------------------------------ Declaration: function LowMemory : Boolean; Unit: Memory Purpose: LowMemory returns TRUE if a memory allocation used a portion of the memory safety pool, otherwise LowMemory returns FALSE. Use of the memory safety pool is described in Chapter 19. LowMemSize variable ------------------------------------------------------------ Declaration: LowMemSize: Word = 4096 div 16; Unit: Memory Purpose: Specifies the size of the memory safety pool, in 16-byte paragraphs. The default is 4K bytes but it may be set to larger values, as needed for your application. See Chapter 19 for more information on using LowMemory and LowMemSize and detecting low or out of memory conditions in your Turbo Vision applications. MaxBufMem variable ------------------------------------------------------------ Declaration: MaxBufMem : Word = 65536 div 16; Unit: Memory Purpose: Specifies the maximum memory size, in 16- byte pages, available for cache buffers. See also GetBufMem and FreeBufMem and the description at the end of Chapter 13. MaxCollectionSize variable ------------------------------------------------------------ Declaration: MaxCollectionSize = 65520 div SizeOf(Pointer); Unit: Objects Purpose: MaxCollectionSize sets the maximum number of elements that can be put into a collection (which is equal to the maximum number of pointers that can fit into a single data segment). MaxViewWidth constant ------------------------------------------------------------ Declaration: MaxViewWidth = 132; Unit: Views Purpose: Determines the maximum width of a view. mbXXXX constant ------------------------------------------------------------ Mouse Button constants Unit: Drivers Purpose: The mbXXXX constants are used to test the Event.Buttonsfield of a TEvent record or the MouseButtons variable to determine if the left or right button was pressed. Constant Value Usage mbLeftButton $01 Value if left button was pressed. mbRightButton $02 Value if right button was presseed. See: MouseButtons, TEvent MemAlloc function ------------------------------------------------------------ Declaration: function MemAlloc( Size: Word): Pointer; Unit: Memory Purpose: Like the System library routine GetMem, MemAlloc attempts to allocate a block of size bytes from the memory heap, returning a pointer to the allocated memory block However, unlike GetMem, MemAlloc will not allow an allocation from the low memory safety pool. Instead, MemAlloc will generate a Heap Overflow error if it needs to access the safety pool. Note that the Borland Object Reference description of this routine is incorrect: Borland's manual states that MemAlloc returns Nil if it runs out of memory. That is not the default operation and will only operate that way if you set the HeapError variable to point to a HeapFunc that returns a value of 1. Listing MEMALLOC.PAS illustrates how to do this. 1 { MEMALLOC.PAS 2 Demonstrates use of the Turbo Vision MemAlloc function. 3 } 4 Program DemoMemAlloc; 5 uses 6 Memory; 7 label 99; 8 var 9 APointer : Pointer; 10 I : Integer; 11 12 function HeapFunc(Size : Word): Integer; far; 13 { Returns 1 = force memory manager to return NIL on out of memory 14 set to alternate values as shown: 15 0 = force a Heap Overflow error 16 2 = tells the memory manger to try again (for instance, 17 you might dispose of some items in this routine, thereby 18 freeing up some memory) 19 } 20 begin 21 22 HeapFunc := 1; 23 24 end; 25 26 27 begin 28 { Initialize the Heap Overflow checker } 29 HeapError := @HeapFunc; 30 31 { Allocate some blocks of memory until running out of free space. 32 You may have to use a value higher than 20 or a larger block size } 33 for i:=1 to 20 do 34 begin 35 APointer := MemAlloc(20000); 36 37 writeln(longint(Apointer)); 38 if APointer = NIL then 39 begin 40 writeln('OUT OF MEMORY'); 41 Goto 99; 42 end; 43 44 Write('Press Enter to continue'); 45 readln; 46 end; 47 48 99: 49 Write('Program completed. Press Enter to continue'); 50 Readln; 51 52 end. Use FreeMem to dispose of the allocated block. Related items: New, GetMem, Dispose, FreeMem, MemAllocSeg MemAllocSeg function ------------------------------------------------------------ Declaration: function MemAllocSeg( Size : Word): Pointer; Unit: Memory Purpose: MemAllocSeg is identical to MemAlloc except that MemAllocSeg forces the offset value of the segment:offset pointer it returns, to be zero. This insures that the memory allocation is always made on an even 16-byte or segment page boundary. MenuBar variable ------------------------------------------------------------ Declaration: MenuBar: PMenuView = nil; Unit: App Purpose: MenuBar is initialized by TProgram.InitMenuBar (via TApplication.InitMenuBar, which you override in your program when initializing the pulldown menus) to point to your application's menu bar. The default value of Nil indicates that no menu bar is defined for the application. See the examples in the "Turbo Vision Tutorial", Chapter 11 in the Borland Pascal Developer's Guide. Message function ------------------------------------------------------------ Declaration: function Message( Receiver: PView; What, Command : Word; InfoPtr : Pointer): Pointer; Unit: Views; Purpose: Use Message to send messages between views. Message creates an evCommand event record using the parameters What, Command and InfoPtr and attempts to invoke Receiver^.HandleEvent to process the event. If Receiver^.HandleEvent successfully handles the event then the Message returns Event.InfoPtr from the processed message (which is a pointer to the object that handled the message). Otherwise, if the event was not handled, Message returns NIL. When using Message, the InfoPtr parameter may be used for most any purpose. For example, to pass a block of data to the recepient, set this parameter to point to a data record. If you wish to let the recepient of the message know who sent the message, set InfoPtr to @Self. The message facility is used for many purposes. One example is a list box and a vertical scroll bar. Whenever the scroller position is adjusted (using the mouse or keyboard controls), the scroller sends a message informing the world that it has changed, Message( TopView, evBroadcast, cmScrollBarChanged, @Self ); where TopView is a TView function returning a pointer to the current modal view (hence, the view that owns the scrollbar), and cmScrollBarChanged is a standard message broadcast to the rest of the views informing the world that it has changed. TopView^.HandleEvent looks at the cmScrollBarChanged message and passes it along to its subviews. Eventually, the list box view receives and processes the message at its HandleEvent method, causing the listbox cursor to move up or down, or for the contents of the list box to be redrawn. MessageBox function ------------------------------------------------------------ Declaration: function MessageBox( Msg: String; Params: Pointer; AOptions : Word) : Word; Unit: MsgBox, source in file \TP\TVDEMOS\MSGBOX.PAS Purpose: MessageBox is not described in the Borland documentation but is provided in the file MSGBOX.PAS in the \TP\TVDEMOS directory (TP 6.0). MessageBox displays a string within a dialog box, inserting optional Params parameters, as desired, and displays optional Okay, Cancel, Yes or No buttons depending upon the settings of the AOptions parameter. This function is useful for displaying error and warning messages. The Msg string and the Params parameter are both passed to the FormatStr procedure for formatting. Because of this, you can insert variable parameters into the Msg string (see the description of FormatStr for more information on the type of formatting that may be performed). For example, if a problem occurs renaming a file, you might display an error message using the sample code shown in Listing DMSGBOX2.PAS. 1 { DMSGBOX2.PAS 2 Demonstrates use of the MessageBox function 3 } 4 procedure TShell.DemoMessageBox; 5 6 var 7 Control : Word; 8 ErrMsg : Array [0..0] of Longint; 9 FileName: String; 10 11 begin 12 13 FileName := 'SAMPLE.TXT'; 14 ErrMsg[0] := Longint(@FileName); 15 Control := MessageBox ('Problem renaming %s', @ErrMsg, 16 mfError or mfOKButton or mfCancelButton ); 17 18 end; { TShell.DemoMessageBox } 19 20 The ErrMsg array is set to point to the filename parameter that will be inserted into the message string (as per FormatStr usage). The AOptions values select the type of message box to display and the type of buttons to display in the message box. Select only one Message box type, and or it with the button types shown in the Button flags table. The MessageBox function returns either cmOkay, cmCancel, cmYes or cmNo. Table of Message Box Types Constant Value Usage mfWarning $0000 Display a warning type message box mfError $0001 Display an error type message box mfInformation $0002 Display an Information box mfConfirmation $0003 Display a confirmation box Table of Button flags Constant Value Usage mfYesButton $0100 Show a Yes button mfNoButton $0200 Show a No button mfOkButton $0400 Show an Okay button mfCancelButton $0800 Show a Cancel button mfYesNoCancel Show a Yes, No and a Cancel button mfOkCancel Show an Okay and a Cancel button IMPORTANT MessageBox only works within Turbo Vision applications. Do not attempt to use MessageBox in non-Turbo Vision applications. See: FormatStr, MessageBoxRect, TStaticText MessageBoxRect function ------------------------------------------------------------ Declaration: function MessageBoxRect ( var R : TRect; Msg : String; Params : Pointer; AOptions : Word ): Word; Unit: MSGBOX, source code in \TP\TVDEMOS\MSGBOX.PAS Purpose: MessageBoxRect is identical to MessageBox, except that you can specify a specific location and size for the message box using the R parameter. For example, R.Assign (5, 5, 60, 10); Control := MessageBoxRect( R, 'Problem Renaming %s', @ErrMsg, mfError or mfCancel ); See: MessageBox MinWinSize variable ------------------------------------------------------------ Declaration: MinWinSize : TPoint = (X: 16; Y: 6); Unit: Views Purpose: MinWinSize sets the minimum allowed width and height for all objects descended from TWindow. The default is 16 characters wide and 6 characters high (including the shadow). You can see how these values are used by sizing an editor window in the IDE to the minimum size. MouseButtons variable ------------------------------------------------------------ Declaration: MouseButtons : Byte; Unit: Drivers Purpose: Contains the current state of the mouse buttons. See the mbXXXX constants for the bit settings in this variable. MouseEvents variable ------------------------------------------------------------ Declaration: MouseEvents : Boolean = False; Unit: Drivers Purpose: The InitEvents procedure detects the prescence of a mouse, and if a mouse is found, sets MouseEvents to True. If no mouse is found, then MouseEvents is set to False and no mouse event processing occurs. MouseIntFlag variable ------------------------------------------------------------ Declaration: MouseIntFlag : Byte; Unit: Drivers Purpose: This is an internal variable used by Turbo Vision. MouseReverse variable ------------------------------------------------------------ Declaration: const MouseReverse : Boolean = FALSE; Unit: Drivers Purpose: When set to TRUE, this field causes the TEvent.Buttons field to reverse the mbLeftButton and mbRightButton flags. MouseWhere variable ------------------------------------------------------------ Declaration: MouseWhere: TPoint; Unit: Drivers Purpose: This TPoint-typed variable is set by the mouse interrupt handler and contains the coordinates of the mouse in global or screen coordinates. Youcan convert the coordinates to view or window relative coordinates using the TView.MakeLocal procedure. MoveBuf procedure ------------------------------------------------------------ Declaration: procedure MoveBuf( var Dest; var Source; Attr : Byte; Count : Word ); Unit: Objects Purpose: MoveBuf is typically used for copying text and video attribute bytes to a TDrawBuffer-type array. Such an array holds character bytes in the low bytes of each word, and attribute values in the high bytes. MoveBuf copies Count bytes from Source into the low bytes of the Dest destination parameter, setting each high byte to the Attr byte value (or leaving the attribute bytes as is if Attr equals zero). See: MoveChar, TDrawBuffer, TView.WriteBuf and TView.WriteLine. MoveChar procedure ------------------------------------------------------------ Declaration: procedure MoveChar( var Dest: C: Char; Attr: Byte; Count : Word); Unit: Objects Purpose: Similar to MoveBuf, except that this copies the single character C, Count number of times, into each low byte of the Dest parameter (which should be a TDrawBuffer type), and if Attr is non-zero, copies Attr to each high byte position in the array of words. See: MoveBuf, TDrawBuffer, TView.WriteBuf and TView.WriteLine. MoveCStr procedure ------------------------------------------------------------ Declaration: procedure MoveCStr( var Dest; Str: String; Attrs: Word); Unit: Objects Purpose: MoveCStr copies a string to a TDrawBuffer array such that the text is alternately one of two different colors. MoveCStr copies the Str string parameter to the Dest (a TDrawBuffer array) and sets each character's attributes using either the low or high byte of the Attr word. Initially, MoveCStr uses the low byte of Attr, but upon encountering a "~" tilde character, MoveCStr switches to the high byte of Attr. Each tilde in the string causes MoveCStr to toggle to the other Attr attribute byte. MoveCStr is used by Turbo Vision for setting up pulldown menu strings where the hot keys are set off in a different color from the rest of the text. For example, NewSubMenu('~R~un', hcNoContext, NewMenu( ... You use MoveCStr like this: var ABuffer : TDrawBuffer; ... MoveCStr( ABuffer, 'This ~is~ some text.', $0770 ); WriteLine( 10, 10, 18, 1, ABuffer ); This sets the word 'is' to the attribute $07 and the rest of the text to $70. See: TDrawBuffer, MoveChar, MoveBuf, MoveStr, TView.WriteBuf and TView.WriteLine, see "Setting Color Palettes" in Chapter 13, "More Turbo Vision Features" in the Borland Pascal Developer's Guide, CColor, CMonochrome, CBlackWhite MoveStr procedure ------------------------------------------------------------ Declaration: procedure MoveStr( var Dest; Str: String; Attr : Byte); Unit: Objects Purpose: MoveCStr copies the Str string parameter to the Dest (a TDrawBuffer array) and sets each character's attributes to the video attribute contained in Attr. See: TDrawBuffer, MoveChar, MoveBuf, MoveStr, TView.WriteBuf and TView.WriteLine, See "Setting Color Palettes" of Chapter 13 in the Borland Pascal Developer's Guide, CColor, CMonochrome, CBlackWhite NewItem function ------------------------------------------------------------ Declaration: function NewItem( Name, Param : TMenuStr; KeyCode : Word; Command : Word; AHelpCtx : Word; Next : PMenuItem) : PMenuItem; Unit: Menus Purpose: NewItem is used to create new TMenuItem records during creation of pulldown menus and is typically nested, passing NewItem as the Next parameter. NewItem('~S~how Outline Numbering', 'F5', 0, cmOutlining, hcNocontext, NewItem( .... ) ) See examples and additional descriptions in Chapters 11-12 of the Borland Pascal Developer's Guide. See: NewMenu, NewSubMenu, TApplication.InitMenuBar. NewLine function ------------------------------------------------------------ Declaration: function NewLine ( Next: PMenuItem) : PMenuItem; Unit: Menus Purpose: Use NewLine to insert horizontal separator lines into pulldown menus. You can place NewLine anywhere that you would use a NewItem function. See Chapter 14, Turbo Vision Tutorial. NewMenu function ------------------------------------------------------------ Declaration: function NewMenu (Items: PMenuItem): PMenu; Unit: Menus Purpose: Use NewMenu to create a new pulldown menu with a menu bar initialization statement. See Chapter 11, "Turbo Vision Tutorial" in the Borland Pascal Developer's Guide for an example of using this function. NewSItem function ------------------------------------------------------------ Declaration: function NewSItem( Str : String; ANext : PSItem): PSItem; Unit: Dialogs Purpose: Use nested calls to NewSItem to create a linked list of strings. See Listing DNEWSITM.PAS for an example. Listing DNEWSITM.PAS 1 { DNESITM.PAS 2 Demonstrates use of NewSItem function 3 } 4 5 Program DNEWSITM; 6 uses 7 Dialogs; 8 9 var 10 AList : PSItem; 11 TempPtr : PSItem; 12 13 begin 14 15 16 { Create a singly-linked string list using nested 17 NewSItem calls. 18 } 19 AList := NewSItem('Item 1', 20 NewSItem('Item 2', 21 NewSItem('Item 3', 22 NewSItem('Item 4', nil)))); 23 24 TempPtr := AList; 25 while TempPtr <> Nil do 26 begin 27 Writeln( TempPtr^.Value^ ); 28 TempPtr := TempPtr^.Next; 29 end; 30 31 Write ('Press Enter to Continue'); 32 Readln; 33 34 end. 35 See: TSItem NewStatusDef function ------------------------------------------------------------ Declaration: function NewStatusDef( AMin, AMax: Word; AItems: PStatusItem; ANext: PStatusDef) : PStatusDef; Unit: Menus Purpose: Use NewStatusDef, in conjunction with NewStatusKey to create an entire status line definition. See Chapter 11, "Turbo Vision Tutorial" in the Borland Pascal Developer's Guide. See: NewStatusKey, TApplication.InitStatusLine, TStatusDef NewStatusKey function ------------------------------------------------------------ Declaration: function NewStatusKey( AText: String; AKeyCode: Word; ACommand: Word; ANext: PStatusItem) : PStatusItem; Unit: Menus Purpose: Use NewStatusKey, in conjunction with NewStatusDef to create a status line definition. If AText is a null string, then the status item is hidden (for example, the IDE uses the hidden F10 key to activate the pull down menus). AKeyCode is one of the kbXXXX constants and ACommand is a Turbo Vision or user defined cmXXXX command constant. The last parameter ANext is used to nest multiple calls to NewStatusKey in order to create an entire status line in a single statement. See Chapter 11, "Turbo Vision Tutorial" in the Borland Pascal Developer's Guide for details about using this function. See: NewStatusDef, TApplication.InitStatusLine, TStatusDef NewStr function ------------------------------------------------------------ Declaration: function NewStr(S : String): PString; Unit: Objects Purpose: Use NewStr to dynamically a string variable. NewStr is especially useful for creating arrays or collections of strings. See listing, below, for an example of an array of strings. Always use DisposeStr to dispose a PString object created with NewStr. Sample code: var AStrArray : Array[0..100] of PString; ... for I := 0 to 100 do begin Readln(InFile, AWord); AStrArray[I] := NewStr(AWord); end; for I:=0 to 100 do Writeln( AStrArray[I]^ ); See: DisposeStr, Chapter 14,"Collections" in the Borland Pascal Developer's Guide. NewSubMenu function ------------------------------------------------------------ Declaration: function NewSubMenu( Name: TMenuStr; AHelpCtx: Word; SubMenu: PMenu; Next: PMenuItem) : PMenuItem; Unit: Menus Purpose: NewSubMenu creates an individual pulldown menu within the menu bar initialization. See Chapter 11, "Turbo Vision Tutorial" in the Borland Pascal Developer's Guide for examples of menu creation. See: NewItem, NewMenu, NewLine ofXXXX constants ------------------------------------------------------------ TView.Options field bit positions Purpose: The ofXXXX constants select options available in all TView-derived objects. Setting the bit position to a 1 sets the indicated attribute; clearing the bit position to 0 disables the indicated attributes. Constant Value Usage ofSelectable $0001 If this bit is set, then the view can be selected with a mouse. While most views are normally selectable, this bit gives the option to make the item unselectable. An example of an unselectable view is TStaticText items. ofTopSelect $0002 When set, this view will move to the topmost view whenever it is selected. This option should normally be set only for window objects. ofFirstClick $0004 When a mouse click is used to select a view, the click can be optionally passed to the view after it is selected. For example, within a dialog box, if you click on a button, you not only wish to set the focus to that button, but you probably also want to activate the button at the same time. ofFramed $0008 When set, the view has visible frame drawn around it. ofPreProcess $0010 This option enables views other than the focused view to have a chance at processing an event. Normally, events are passed down the focus-chain, however, events are also sent to any subviews (in Z-order) that have this bit set, giving them a chance to process the event. See Chapter 13, "More Turbo Vision Features" in the Borland Pascal Developer's Guide. ofPostProcess $0020 When this bit is set, subviews are given a chance after the focused view, to process events that have not yet cleared. ofBuffered $0040 Views can optionally store an image of themselves in a memory buffer. When the view needs to be redrawn on the screen, it can rapidly copy itself from the buffer, rather than recreate the drawing on the screen. To enable cache buffering of the view's displayable image, set the ofBuffered bit to on. The buffers are stored in special, disposable memory caches. When the memory manager runs out of memory, these cache buffers are automatically deleted to free up more memory space, and the view's recreate their displayable images as they would without the ofBuffered option. If you set the ofBuffered option, be sure to call the TGroup method's Lock and Unlock to prevent copying of the screen image to the display until all of the subview's have drawn themselves. See also: GetBufMem, FreeMem ofTileable $0080 Generally, you will want window objects to be either tileable or cascadeable so that the desktop can automatically rearrange the windows, if desired. If you wish to disable this function for a particular view, clear this bit position in the Options field. When disabled, the view will not move on the screen, even if other views become tiled or cascaded. See also: TDeskTop.Cascade, TDeskTop.Tile. ofCenterX $0100 When this bit is set, the insertion of the view causes the view to be horizontally centered. ofCenterY $0200 When this bit is set, a view is centered in the vertical direction (especially useful when switching between 25 and 43/50 line modes). ofCentered $0300 Same as setting both ofCenterX and ofCenterY: centers the view in both vertical and horizontal directions. PChar type ------------------------------------------------------------ Declaration: PChar = ^Char; Unit: Objects PositionalEvents variable ------------------------------------------------------------ Declaration: PositionalEvents: Word = evMouse; Unit: Views Purpose: You can force events and messages to route as if they are positional events by setting PositionalEvents to the event's evXXXX constant. By adding your own event classes (by setting the bit patterns) you can create broadcast messages that route the same as a positional event. See: FocusedEvents, Chapter 13, "More Turbo Vision Features" in the Borland Pascal Developer's Guide. PrintStr procedure ------------------------------------------------------------ Declaration: procedure PrintStr(S : String); Unit: Drivers Purpose: Writes the string S to the screen. You might wish to use this procedure in place of the Pascal Write function, since PrintStr calls a DOS function directly, thereby eliminating the need to link in the much larger Turbo Pascal file I/O library routines. PString type ------------------------------------------------------------ Declaration: PString = ^String; Unit: Objects PtrRec type ------------------------------------------------------------ Declaration: PtrRec = record Ofs, Seg : Word; end; Unit: Objects Purpose: Use this type to reference the segment:offset values of a pointer variable. RegisterApp procedure ------------------------------------------------------------ Declaration: procedure RegisterApp Unit: App Purpose: Calls RegisterType to register all objects in the App unit (see below) for stream I/O. Objects registered by RegisterApp: TBackground, TDeskTop See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterColorSel procedure ------------------------------------------------------------ Declaration: procedure RegisterColorSel; Unit: ColorSel \TP\TVDEMOS\COLORSEL.PAS, ..TPU Purpose: Calls RegisterType to register all objects in the ColorSel unit (see below) for stream I/O. Objects registered by RegisterColorSel: TColorSelector, TMonoSelector, TColorDisplay, TColorGroupList, TColorItemList, TColorDialog See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterDialogs procedure ------------------------------------------------------------ Declaration: procedure RegisterDialogs; Unit: Dialogs Purpose: Calls RegisterType to register all objects in the Dialogs unit (see below) for stream I/O. Objects registered by RegisterDialogs: TDialog, TInputLine, TButton, TCluster, TRadioButtons, TCheckBoxes, TListBox, TStaticText, TLabel, THistory, TParamText See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterEditors procedure ------------------------------------------------------------ Declaration: procedure RegisterEditors; Unit: Editors, \TP\EDITORS.PAS Purpose: Calls RegisterType to register all objects in the Editors unit for stream I/O. Objects registered by RegisterEditors: TEditor, TMemo, TFileEditor, TIndicator, TFileWindow See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterMenus procedure ------------------------------------------------------------ Declaration: procedure RegisterMenus Unit: Menus Purpose: Calls RegisterType to register all objects in the Menusunit for stream I/O. Objects registered by RegisterMenus: TMenuBar, TMenuBox, TStatusLine See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterObjects procedure ------------------------------------------------------------ Declaration: procedure RegisterObjects Unit: Objects Purpose: Calls RegisterType to register all objects in the Objectsunit for stream I/O. Objects registered by RegisterObjects: TCollection, TStringCollection See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. RegisterStdDlg procedure ------------------------------------------------------------ Declaration: procedure RegisterStdDlg; Unit: STDDLG.PAS Purpose: Calls RegisterType to register all objects in the StdDlgunit for stream I/O. Objects registered by RegisterStdDlg: TFileInputLine, TFileCollection, TFileList, TFileInfoPane, TFileDialog, TDirCollection, TDirListBox, TChDirDialog See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide. Registertype procedure ------------------------------------------------------------ Declaration: procedure RegisterType( var S : TStreamRec ); Unit: Objects Purpose: When writing objects to a stream, you must first register the object type with the Stream I/O system. Example usage: RegisterType( RCollection ); registers the TCollection type using its predefined RCollection stream registeration record. See Chapter 15, "Streams" in the Borland Pascal Developer's Guide, for a complete discussion on the use of stream I/O and the RegisterType procedure. RegisterViews procedure ------------------------------------------------------------ Declaration: procedure RegisterViews Unit: Views Purpose: Calls RegisterType to register all objects in the Viewsunit for stream I/O. Objects registered by RegisterViews: TView, TFrame, TScrollBar, TScroller, TListViewer, TGroup, TWindow See: RegisterType, Chapter 15, "Streams" in the Borland Pascal Developer's Guide.